package persistencia;



import model.Material;
import model.Proveedor;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;

public class AdministradorPersistenciaMaterial {

private static AdministradorPersistenciaMaterial pool;
	
	
	private AdministradorPersistenciaMaterial()
	{
		
	}
	
	/* SINGLETON */
	
	public static AdministradorPersistenciaMaterial getInstancia()
	{
		if (pool== null)
			pool =new AdministradorPersistenciaMaterial();
		return pool;
	}
	
	/* INSERTA UN MATERIAL EN BD */
	
	public void insert(Material m, Proveedor p)
	{
		//Obtener conexion BD 
		Connection con = PoolConnection.getPoolConnection().getConnection();
		
		PreparedStatement ps = null;
		
		
		
		try
		{
			//Preparar sentencia insert en tabla destino
			
			String senten = "INSERT INTO materiales (nombre,stock,puntoPedido,stockMaximo,costo, codigo, cuitProveedor) VALUES (?,?,?,?,?,?,?)" ;
			
			//insert into material (codigo,nombre,stock,puntoPedido,stockMaximo,costo) values (1,'tela',1.5,1.0,10.0,3.5);
			
			//String senten = "INSERT INTO material (codigo,nombre,stock,puntoPedido,stockMaximo,costo) VALUES (2,'tela',1.5,1.0,10.0,3.5)" ;
			
			
			ps = con.prepareStatement(senten);
			
			ps.setString(1,m.getNombre());
			ps.setFloat(2,m.getStock());
			ps.setFloat(3,m.getPuntoPedido());
			ps.setFloat(4,m.getStockMaximo());
			ps.setFloat(5,m.getPrecio());
			ps.setInt(6, m.getCodigo());
			ps.setInt(7, p.getCuit());
			
			
			/*ps.setString(1,c.getDni());
			ps.setString(2,c.getNombre());
			ps.setString(3,c.getDomicilio());
			ps.setString(4,c.getTelefono());*/
			
			ps.execute();
			
			PoolConnection.getPoolConnection().realeaseConnection(con);
			
		}
	      catch( SQLException e ) 
	      {
				System.out.println("Mensaje Error al Insertar Material: " + e.getMessage());
				System.out.println("Stack Trace al Insertar Material: " + e.getStackTrace());
				PoolConnection.getPoolConnection().realeaseConnection(con);
	      }
	      
	}
	
	/* DEVUELVE UN MATERIAL */
	
	public Material selectMaterial(int codigo) {
		
		//Obtener conexion BD 
				Connection con = PoolConnection.getPoolConnection().getConnection();
				
				PreparedStatement ps = null;
				ResultSet rs = null;
				Material material = null;
				
		try{
			//Preparar SQL
			
			String SQL = "SELECT * from materiales WHERE codigo ="+codigo;
			
			ps = con.prepareStatement(SQL);
			rs = ps.executeQuery();
			
			while(rs.next()){
				
				material = new Material(codigo, rs.getString("nombre"), rs.getFloat("stock"), rs.getFloat("puntoPedido"), rs.getFloat("stockMaximo"), rs.getFloat("costo"));
			//	System.out.println(rs.getString("nombre"));
				
			}
			PoolConnection.getPoolConnection().realeaseConnection(con);
			
						
		}
		catch( SQLException e ) 
	      {
				System.out.println("Mensaje Error al encontrar Material: " + e.getMessage());
				System.out.println("Stack Trace al encontrar Material: " + e.getStackTrace());
				PoolConnection.getPoolConnection().realeaseConnection(con);
	      }
		return material;
		
	}
	
/* DEVUELVE TODOS LOS MATERIALES */
	
	public ArrayList<Material> selectMateriales() {
		
		//Obtener conexion BD 
				Connection con = PoolConnection.getPoolConnection().getConnection();
				ArrayList<Material> materiales= new ArrayList<Material>();
				PreparedStatement ps = null;
				ResultSet rs = null;
				Material material = null;
				
		try{
			//Preparar SQL
			
			String SQL = "SELECT * from materiales";
			
			ps = con.prepareStatement(SQL);
			rs = ps.executeQuery();
			
			while(rs.next()){
				
				material = new Material(rs.getInt("codigo"), rs.getString("nombre"), rs.getFloat("stock"), rs.getFloat("puntoPedido"), rs.getFloat("stockMaximo"), rs.getFloat("costo"));
				materiales.add(material);
				
			}
			PoolConnection.getPoolConnection().realeaseConnection(con);
			
						
		}
		catch( SQLException e ) 
	      {
				System.out.println("Mensaje Error al encontrar Material: " + e.getMessage());
				System.out.println("Stack Trace al encontrar Material: " + e.getStackTrace());
				PoolConnection.getPoolConnection().realeaseConnection(con);
	      }
		return materiales;
		
	}
	
	/* DEVUELVE LOS MATERIALES ASOCIADOS A UN PROVEEDOR */
	
	public Collection<Material> selectMateriales(int cuit) {
		
		//Obtener conexion BD 
		Connection con = PoolConnection.getPoolConnection().getConnection();
		
		PreparedStatement ps = null;
		ResultSet rs = null;
		Material material = null;
		Collection<Material> materiales = null;
		
		try{
			
			//Preparar SQL
			
			String SQL = "SELECT * from materiales WHERE cuitProveedor ="+cuit;
			
			ps = con.prepareStatement(SQL);
			rs = ps.executeQuery();
			materiales = new ArrayList<Material>();
			PoolConnection.getPoolConnection().realeaseConnection(con);
			
			while(rs.next()){
				
				material = new Material(rs.getInt("codigo"), rs.getString("nombre"), rs.getFloat("stock"), rs.getFloat("puntoPedido"), rs.getFloat("stockMaximo"), rs.getFloat("costo"));
				materiales.add(material);
				
			}
			
		}
		catch( SQLException e ) 
	      {
				System.out.println("Mensaje Error al cargar Materiales: " + e.getMessage());
				System.out.println("Stack Trace al cargar Materiales: " + e.getStackTrace());
				PoolConnection.getPoolConnection().realeaseConnection(con);
	      }
		return materiales;
	}
	
	/* ACTUALIZA EL STOCK */

	public void updateStock(int codigo, float stock) {
		//Obtener conexion BD 
				Connection con = PoolConnection.getPoolConnection().getConnection();
				
				PreparedStatement ps = null;
				
				try{
					String SQL = "UPDATE materiales SET stock = "+stock+" WHERE codigo ="+codigo;
					
					ps = con.prepareStatement(SQL);
					ps.execute();
					PoolConnection.getPoolConnection().realeaseConnection(con);
				}
				catch( SQLException e ) 
			      {
						System.out.println("Mensaje Error al Actualizar Stock de Material: " + e.getMessage());
						System.out.println("Stack Trace al actualizar Stock de Material: " + e.getStackTrace());
						PoolConnection.getPoolConnection().realeaseConnection(con);
			      }
		
	}
	
	
	
	
	
	
}
